/*************************************************************************
	> File Name: chnmanager.h
	> Author: xuwenlong
	> Mail: myxuan475@126.com 
	> Created Time: 2019年05月08日 星期三 08时45分30秒
 ************************************************************************/
#ifndef __CHNMANAGER_H__
#define __CHNMANAGER_H__
#include <baseinfo/baseinfo.h>
#include <transport/transport.h>
#include <utils/timer.h>
#include <utils/shared_ptr.h>
#include <utils/sqlite.h>
#include <vector>
#include <queue>

#include "acquisition.h"

class ChnManager
{
public:
    ChnManager();
    virtual ~ChnManager();

    void Start();
    void Stop();
    static ChnManager* instance();

    void CommitData(int index);

    void StartChannel();
    void StopChannel();
    tAcquisitor GetAcquisitor(const deviceinfo_t& devinfo);
    void UpdateChannel();
    void ClearChannels();

    vector<tChannel> &AllChannels();

    //协议模板
    tTemplate GetTemplate(S32 model);
    void UpdateTemplate();
    double DailyMemory();

private:
    vector<tChannel>       m_listChannel;
    //协议模板
    vector<tTemplate>      m_listTemplate;
    Lock                   m_iConfigLock;
};

class DebugItem:public DataItem
{
public:
    DebugItem(ID_DEV &devAddr,Template &temp):
        DataItem(devAddr,-1),
        m_temp(temp) {
    }

    virtual ~DebugItem() {

    }

    virtual tExpress LocateFunction(const string &def, int funcId = -1) {
        return m_temp.LocateFunction(def.c_str(),funcId);
    }

private:
    Template &m_temp;
};

#endif
